/**
 * 给定数组，正负均有，允许如下操作：
 * 选择一个Ai，将其改为[0, Ai]中的一个数值，如果Ai为负，则可以修改的范围是[Ai, 0]
 * 如何操作可使得乘积最小，问最少操作的方案
 * 注意到操作不可能增大乘积的绝对值，因此如果是非负数，直接降为0即可
 * 如果A中有零，无需操作
 * 如果A全是正数，直接将第一个数改为0即可
 * 如果A有负数，看负数的数量。如果是奇数个，无需操作。如果是偶数个，将第一个数改为0即可
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

int N;
vector<llt> A;

void proc(){
    int cnt[3] = {0};
    for(auto i : A){
        if(i < 0) ++cnt[0];
        else if(i == 0) ++cnt[1];
        else ++cnt[2];
    }

    if(cnt[1]){
        return (void)(cout << "0\n");
    }

    if(cnt[2] == N){
        cout << "1\n1 0\n";
        return;
    }

    if(cnt[0] % 2) return (void)(cout << "0\n");

    for(int i=0;i<N;++i){
        if(A[i] < 0){
            cout << "1\n";
            cout << i + 1 << " 0\n";
            return;
        }
    } 
    assert(0);
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> N;
        A.assign(N, 0);
        for(auto & i : A) cin >> i;
        proc();
    }
    return 0;
}